package cho114366.basic;

public class J15_Interface {
	public static void main(String[] args){
    //J15SungJukService sjsrv=
	//	new J15SungJukService() {}
		//인터페이스는 new 연산자를 통해 객체로 만들수 없음
		//반드시 이것을 상속(구현)한 클래스를
		//통해 객체로 생성할 수 있음
	
		J15SungJukServiceImpl sjsrv
		=new J15SungJukServiceImpl();
		
		//성적처리에 필요한 기능(총점,평균,학점)들을
		//인터페이스로 분리해서 추상메서드로 정의하고
		//그것을 구현해서 implements해서 클래스로 작성
		//J15SungJukService(인터페이스)
		//->J15SungJukServiceImpl(구현클래스)
		
		J15SungJukVO sj=
				new J15SungJukVO("지현",98,87,54);
		//값을 저장하는 클래스 선언 및 초기화
		sj.setTot(sjsrv.getTotal(sj));
		sj.setAvg(sjsrv.getAverrage(sj));
		sj.setGrd(sjsrv.getGrade(sj));
		//총점, 평균, 학점 계산 후
		//각 변수에 값 저장
		System.out.println(sj.toString());
	}
	}	
	//인터페이스 정의
	
	//인터페이스 정의(~Service)
			interface J15SungJukService{
				//인터페이스가 제공할 메서드 정의
				//메서드는 서명까지 작성
				//이러한 메서드를 추상메서드라 함
				int AAA=12;//멤버는 추상 메소드만 가능
				//int getTotal(int kor,int eng,int mat);
				int getTotal(J15SungJukVO sj); //한번에 변수 받기
				double getAverrage(J15SungJukVO sj);
				char getGrade(J15SungJukVO sj);
				

}
			//인터페이스를 구현한 클래스 작성(~Impl)
			class J15SungJukServiceImpl
			implements J15SungJukService{

				@Override
				public int getTotal(J15SungJukVO sj) {
					
					 int tot=sj.getKor()+sj.getEng()+sj.getMat();
					 return tot;
				}

				@Override
				public double getAverrage(J15SungJukVO sj) {
					//double avg=	
					double avg=(double)sj.getTot()/3;
					return avg;
				}

				@Override
				public char getGrade(J15SungJukVO sj) {
				char grd='가';
				
				switch ((int)sj.getAvg()/10) {
				
				case 10:
				case 9:
					grd = '수';
					break;
				case 8:
					grd = '우';
					break;
				case 7:
					grd = '미';
					break;
				case 6:
					grd = '양';
					break;
				default:
					grd = '가';
				
			}
					return grd;

	
			
				}
					
					
				}
				
			

class J15SungJukVO{
	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
	
	
	public J15SungJukVO() {
		
	}


	public J15SungJukVO(String name, int kor, int eng, int mat) {
		super();
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public int getKor() {
		return kor;
	}


	public void setKor(int kor) {
		this.kor = kor;
	}


	public int getEng() {
		return eng;
	}


	public void setEng(int eng) {
		this.eng = eng;
	}


	public int getMat() {
		return mat;
	}


	public void setMat(int mat) {
		this.mat = mat;
	}


	public int getTot() {
		return tot;
	}


	public void setTot(int tot) {
		this.tot = tot;
	}


	public double getAvg() {
		return avg;
	}


	public void setAvg(double avg) {
		this.avg = avg;
	}


	public char getGrd() {
		return grd;
	}


	public void setGrd(char grd) {
		this.grd = grd;
	}


	@Override
	public String toString() {
		return "J15SungJukVO [name=" + name + ", kor=" + kor + ", eng=" + eng
				+ ", mat=" + mat + ", tot=" + tot + ", avg=" + avg + ", grd="
				+ grd + "]";
	}


	
}